/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upn.sigemfi.rec.be;

import edu.upn.sigemfi.seg.be.Usuario;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Diego
 */
@Entity
@Table(name = "REC_PROCESO_COBRANZA")
@NamedQueries({
    @NamedQuery(name = "ProcesoCobranza.findAll", query = "SELECT p FROM ProcesoCobranza p"),
    @NamedQuery(name = "ProcesoCobranza.findByIdProcesoCobranza", query = "SELECT p FROM ProcesoCobranza p WHERE p.id = :id"),
    @NamedQuery(name = "ProcesoCobranza.findByFecha", query = "SELECT p FROM ProcesoCobranza p WHERE p.fecha = :fecha"),
    @NamedQuery(name = "ProcesoCobranza.findByXtipo", query = "SELECT p FROM ProcesoCobranza p WHERE p.xtipo = :xtipo")})
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "XTIPO", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "PROC")
public abstract class ProcesoCobranza implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_PROCESO_COBRANZA", nullable = false)
    protected Long id;
    @Column(name = "FECHA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecha;
    @Column(name = "XTIPO", length = 15)
    private String xtipo;
    @JoinColumn(name = "FID_REC_CREDITO", referencedColumnName = "ID_CREDITO")
    @ManyToOne(fetch = FetchType.LAZY)
    private Credito fidRecCredito;
    @JoinColumn(name = "FID_SEG_USUARIO", referencedColumnName = "ID_USUARIO")
    @ManyToOne(fetch = FetchType.LAZY)
    private Usuario fidSegUsuario;

//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private AccionPrejudicial accionPrejudicial;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private CompromisoPago compromisoPago;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private Adjudicacion adjudicacion;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private CargoComision cargoComision;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private AccionJudicial accionJudicial;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private Refinanciamiento refinanciamiento;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private AccionCobranza accionCobranza;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private ComprobacionCliente comprobacionCliente;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private Condonacion condonacion;
//    @OneToOne(cascade = CascadeType.ALL, mappedBy = "procesoCobranza", fetch = FetchType.LAZY)
//    private ProposicionCastigo proposicionCastigo;

    public ProcesoCobranza() {
    }

    public ProcesoCobranza(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public Credito getFidRecCredito() {
        return fidRecCredito;
    }

    public void setFidRecCredito(Credito fidRecCredito) {
        this.fidRecCredito = fidRecCredito;
    }

    public String getXtipo() {
        return xtipo;
    }

    public void setXtipo(String xtipo) {
        this.xtipo = xtipo;
    }

    public Usuario getFidSegUsuario() {
        return fidSegUsuario;
    }

    public void setFidSegUsuario(Usuario fidSegUsuario) {
        this.fidSegUsuario = fidSegUsuario;
    }
    

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ProcesoCobranza other = (ProcesoCobranza) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 67 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

//    public AccionCobranza getAccionCobranza() {
//        return accionCobranza;
//    }
//
//    public void setAccionCobranza(AccionCobranza accionCobranza) {
//        this.accionCobranza = accionCobranza;
//    }
//
//    public ComprobacionCliente getComprobacionCliente() {
//        return comprobacionCliente;
//    }
//
//    public void setComprobacionCliente(ComprobacionCliente comprobacionCliente) {
//        this.comprobacionCliente = comprobacionCliente;
//    }
//
//    public Condonacion getCondonacion() {
//        return condonacion;
//    }
//
//    public void setCondonacion(Condonacion condonacion) {
//        this.condonacion = condonacion;
//    }
//
//    public ProposicionCastigo getProposicionCastigo() {
//        return proposicionCastigo;
//    }
//
//    public void setProposicionCastigo(ProposicionCastigo proposicionCastigo) {
//        this.proposicionCastigo = proposicionCastigo;
//    }
//

//
//    public AccionPrejudicial getAccionPrejudicial() {
//        return accionPrejudicial;
//    }
//
//    public void setAccionPrejudicial(AccionPrejudicial accionPrejudicial) {
//        this.accionPrejudicial = accionPrejudicial;
//    }
//
//    public CompromisoPago getCompromisoPago() {
//        return compromisoPago;
//    }
//
//    public void setCompromisoPago(CompromisoPago compromisoPago) {
//        this.compromisoPago = compromisoPago;
//    }
//
//    public Adjudicacion getAdjudicacion() {
//        return adjudicacion;
//    }
//
//    public void setAdjudicacion(Adjudicacion adjudicacion) {
//        this.adjudicacion = adjudicacion;
//    }
//
//    public CargoComision getCargoComision() {
//        return cargoComision;
//    }
//
//    public void setCargoComision(CargoComision cargoComision) {
//        this.cargoComision = cargoComision;
//    }
//
//    public AccionJudicial getAccionJudicial() {
//        return accionJudicial;
//    }
//
//    public void setAccionJudicial(AccionJudicial accionJudicial) {
//        this.accionJudicial = accionJudicial;
//    }
//
//    public Refinanciamiento getRefinanciamiento() {
//        return refinanciamiento;
//    }
//
//    public void setRefinanciamiento(Refinanciamiento refinanciamiento) {
//        this.refinanciamiento = refinanciamiento;
//    }
}
